#include "Bullet3Dynamics/ConstraintSolver/b3Point2PointConstraint.h"
#ifdef __cplusplus
extern "C" {
#endif
b3Point2PointConstraintFloatData* bullet_Newb3Point2PointConstraintFloatData(){
	b3Point2PointConstraintFloatData* wrap_out = new b3Point2PointConstraintFloatData();
	return wrap_out;
}

b3Vector3FloatData* bullet_b3Point2PointConstraintFloatData_GetFieldOfM_pivotInA(b3Point2PointConstraintFloatData* c_this){
	return (b3Vector3FloatData*)(&c_this->m_pivotInA);
}

b3Vector3FloatData* bullet_b3Point2PointConstraintFloatData_GetFieldOfM_pivotInB(b3Point2PointConstraintFloatData* c_this){
	return (b3Vector3FloatData*)(&c_this->m_pivotInB);
}

b3TypedConstraintData* bullet_b3Point2PointConstraintFloatData_GetFieldOfM_typeConstraintData(b3Point2PointConstraintFloatData* c_this){
	return (b3TypedConstraintData*)(&c_this->m_typeConstraintData);
}

b3Point2PointConstraintDoubleData* bullet_Newb3Point2PointConstraintDoubleData(){
	b3Point2PointConstraintDoubleData* wrap_out = new b3Point2PointConstraintDoubleData();
	return wrap_out;
}

b3Vector3DoubleData* bullet_b3Point2PointConstraintDoubleData_GetFieldOfM_pivotInA(b3Point2PointConstraintDoubleData* c_this){
	return (b3Vector3DoubleData*)(&c_this->m_pivotInA);
}

b3Vector3DoubleData* bullet_b3Point2PointConstraintDoubleData_GetFieldOfM_pivotInB(b3Point2PointConstraintDoubleData* c_this){
	return (b3Vector3DoubleData*)(&c_this->m_pivotInB);
}

b3TypedConstraintData* bullet_b3Point2PointConstraintDoubleData_GetFieldOfM_typeConstraintData(b3Point2PointConstraintDoubleData* c_this){
	return (b3TypedConstraintData*)(&c_this->m_typeConstraintData);
}

b3Point2PointConstraint* bullet_Newb3Point2PointConstraint(int rbA,int rbB,b3Vector3* pivotInA,b3Vector3* pivotInB){
	int c_arg_rbA=rbA;
	int c_arg_rbB=rbB;
	b3Vector3 const& c_arg_pivotInA=(b3Vector3 const&)(*pivotInA);
	b3Vector3 const& c_arg_pivotInB=(b3Vector3 const&)(*pivotInB);
	b3Point2PointConstraint* wrap_out = new b3Point2PointConstraint(c_arg_rbA,c_arg_rbB,c_arg_pivotInA,c_arg_pivotInB);
	return wrap_out;
}

b3ConstraintSetting* bullet_b3Point2PointConstraint_GetFieldOfM_setting(b3Point2PointConstraint* c_this){
	return (b3ConstraintSetting*)(&c_this->m_setting);
}

void bullet_b3Point2PointConstraint_getInfo1NonVirtual(b3Point2PointConstraint* c_this,b3TypedConstraint::b3ConstraintInfo1* info,b3RigidBodyData* bodies){
	b3TypedConstraint::b3ConstraintInfo1 * c_arg_info=(b3TypedConstraint::b3ConstraintInfo1 *)(void*)(info);
	b3RigidBodyData const * c_arg_bodies=(b3RigidBodyData const *)(void*)(bodies);
	c_this->getInfo1NonVirtual(c_arg_info,c_arg_bodies);
}

void bullet_b3Point2PointConstraint_getInfo2NonVirtual(b3Point2PointConstraint* c_this,b3TypedConstraint::b3ConstraintInfo2* info,b3Transform* body0_trans,b3Transform* body1_trans){
	b3TypedConstraint::b3ConstraintInfo2 * c_arg_info=(b3TypedConstraint::b3ConstraintInfo2 *)(void*)(info);
	b3Transform const& c_arg_body0_trans=(b3Transform const&)(*body0_trans);
	b3Transform const& c_arg_body1_trans=(b3Transform const&)(*body1_trans);
	c_this->getInfo2NonVirtual(c_arg_info,c_arg_body0_trans,c_arg_body1_trans);
}

b3Vector3* bullet_b3Point2PointConstraint_getPivotInA(b3Point2PointConstraint* c_this){
	b3Vector3 const& c_out = c_this->getPivotInA();
	b3Vector3* wrap_out = (b3Vector3*)(&c_out);
	return wrap_out;
}

b3Vector3* bullet_b3Point2PointConstraint_getPivotInB(b3Point2PointConstraint* c_this){
	b3Vector3 const& c_out = c_this->getPivotInB();
	b3Vector3* wrap_out = (b3Vector3*)(&c_out);
	return wrap_out;
}

void bullet_b3Point2PointConstraint_setPivotA(b3Point2PointConstraint* c_this,b3Vector3* pivotA){
	b3Vector3 const& c_arg_pivotA=(b3Vector3 const&)(*pivotA);
	c_this->setPivotA(c_arg_pivotA);
}

void bullet_b3Point2PointConstraint_setPivotB(b3Point2PointConstraint* c_this,b3Vector3* pivotB){
	b3Vector3 const& c_arg_pivotB=(b3Vector3 const&)(*pivotB);
	c_this->setPivotB(c_arg_pivotB);
}

void bullet_b3Point2PointConstraint_updateRHS(b3Point2PointConstraint* c_this,float timeStep){
	b3Scalar c_arg_timeStep=timeStep;
	c_this->updateRHS(c_arg_timeStep);
}

b3ConstraintSetting* bullet_Newb3ConstraintSetting(){
	b3ConstraintSetting* wrap_out = new b3ConstraintSetting();
	return wrap_out;
}

float bullet_b3ConstraintSetting_GetFieldOfM_damping(b3ConstraintSetting* c_this){
	return (float)(c_this->m_damping);
}

float bullet_b3ConstraintSetting_GetFieldOfM_impulseClamp(b3ConstraintSetting* c_this){
	return (float)(c_this->m_impulseClamp);
}

float bullet_b3ConstraintSetting_GetFieldOfM_tau(b3ConstraintSetting* c_this){
	return (float)(c_this->m_tau);
}

#ifdef __cplusplus
}
#endif
